;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;	leddriver.inc		    ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;; Declarations

llat 	equ	p2.5
lsin	equ p2.7
lsclk	equ	p2.6
LEDklik	equ	p2.2

counter equ 011h		; Counter so I can do something 8 times

;;LEDinit gives a pulse to the leddriver-latch so that it's ready for receiving input
;;	

LEDinit:	orl		p2,#00000011b;
			lcall 	LEDlatch	;Dit stuurt eerste latch en zet poorten op nul
			lcall	SPIinit		;initieer SPI ook
			ret

;;;;; LEDstart
;; Dit moet je oproepen voor je een bericht uitstuurt
LEDstart:	setb	LEDklik		;zet lichtje af
			ret
;;;;; LEDstop
;; Dit moet je oproepen nadat je een bericht uitstuurt
LEDstop:	mov		a,#000h		;Zet lege lijn op leds
			lcall	LEDout		;
LEDstop2:	clr		LEDklik		;zet lichtje op
			ret




;;;;; ledOut
;;
;; Registers used:
;; in: acc
;; out: llat, lsin, lsclk
;;
;; Descr: This will send the 8bit input in the acc to the leddriver, after converting it to 16bit.

LEDout:		//ljmp	SPIzend		;gebruik spi eens.

LEDoutOUD:	push	counter		;push counter op stack
			mov		counter,#08h	;Plaats 8 in counter om af te tellen
			clr		LEDklik		;zet laatste ledje aan
			
ledOutLus:
			lcall 	acu2lsin	;Stuur eerste van ledpaar aan
			lcall 	acu2lsin	;Stuur tweede van ledpaar aan
			rr		A					;Neem volgende bit
			;lcall	delay	;dient om het wat zichtbaarder te maken tijdens testen
			djnz	counter,ledOutLus	;Doe het nog een keer!
ledOute:	lcall	LEDlatch	;stuur latch om in boodschap aan te nemen
			setb	LEDklik	;zet ledje weer uit
			/*	 leegmaken ding
			push	acc
			mov		counter,#000h
			mov		a,#000h
			djnz	acc,$		;zit hier 255 keer!
			djnz	counter,$-1	;Nu 255*255
			lcall	LEDlatch
			pop		acc
			//*/
			pop		counter	;Haal counter weer van stack.
			ret

;;;;; acc2lsin
;;
;; Descr: This moves what's in acc.0 to the serial input of the leddriver and clocks it in
acu2lsin:
			push 	PSW			;Dit om Carry te onthouden
			mov		C,acc.0		;verplaats bit naar C
			mov 	lsin,C		;verplaats bit nu naar buiten
			lcall	LEDclkpulse	;Klok hem binnen
			pop		PSW			;
			ret

;;;;; LEDclkpulse
;;
;; Descr: This gives a clockpulse to the leddriver
LEDclkpulse:
			setb 	lsclk
			clr		lsclk
			ret

;;;;; LEDlatch
;;
;; Descr: Dit stuurt een latch-pulse naar de leddriver
LEDlatch:	setb	llat   	;Doe de puls
			clr		llat
			clr		lsin  	;Zet andere poorten ook weer op nul
			clr		lsclk	
			ret


;;;;; SPI-init
;;
SPIinit:	mov		spicon,#00110111b	; . . spienable mastermode clockpolarity leadingedge traag traag
			ret
			
;;;;; SPI-zend
;;
SPIzend:	clr		wcol 			;zet collision af
			mov		spidat,acc		;stuur data
			jb		wcol,SPIzend	;als er toch collision was, probeer opnieuw
			ret					
;;;;; SPI-interrupt
;;
;;
SPIinterrupt:
			lcall 	LEDlatch	;stuur binnen
			clr		ispi		;clear interruptbit
			reti
				


